2015-03-22 3 views
-1

Я создаю многопользовательский сервер на основе фотона, используя учебные пособия по CRJ Gaming. Я столкнулся с этой ошибкой, пытался исправить ее более двух часов, переучивал учебники несколько раз, я полностью потерял.Ошибка 1: не реализует член интерфейса

Erorr:

Error 1 'FPS.Photon.Server.PhotonServerHandler' does not implement interface member 'FPS.Framework.IHandler<FPS.Photon.Server.PhotonServerPeer>.HandleMessage(FPS.Framework.IMessage, FPS.Photon.Server.PhotonServerPeer)' C:\Users\Blagovest\documents\visual studio 2013\Projects\FPS\FPS.Photon\Server\PhotonServerHandler.cs 12 27 FPS.Photon 

PhotonServerHandler

using ExitGames.Logging; 
using FPS.Framework; 
using FPS.Photon.Application; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace FPS.Photon.Server 
{ 
    public abstract class PhotonServerHandler : IHandler<PhotonServerPeer> 
    { 
     public abstract MessageType Type { get; } 
     public abstract byte Code { get; } 
     public abstract int? SubCode { get; } 
     protected PhotonApplication Server; 
     protected ILogger Log = LogManager.GetCurrentClassLogger(); 

     public PhotonServerHandler(PhotonApplication application) 
     { 
      Server = application; 
     } 

     public bool HandleMessge(IMessage message, PhotonServerPeer serverPeer) 
     { 
      OnHandleMessage(message, serverPeer); 
      return true; 
     } 

     protected abstract bool OnHandleMessage(IMessage message, PhotonServerPeer serverPeer); 
    } 
} 

PhotonServerPeer сообщение

using FPS.Photon.Application; 
using Photon.SocketServer; 
using Photon.SocketServer.ServerToServer; 
using PhotonHostRuntimeInterfaces; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace FPS.Photon.Server 
{ 
    public class PhotonServerPeer : ServerPeerBase 
    { 
     private readonly PhotonServerHandlerList _handlerList; 
     protected readonly PhotonApplication Server; 
     public Guid? ServerId { get; set; } 
     public string TcpAddress { get; set; } 
     public string UdpAddress { get; set; } 
     public string ApplicationName { get; set; } 
     public int ServerType { get; set; } 

     #region Factory Method 

     public delegate PhotonServerPeer Factory(IRpcProtocol protocol, IPhotonPeer photonPeer); 

     #endregion 

     public PhotonServerPeer(IRpcProtocol protocol, IPhotonPeer photonPeer, PhotonServerHandlerList handlerList, PhotonApplication application) : base(protocol, photonPeer) 
     { 
      _handlerList = handlerList; 
      Server = application; 
     } 

     protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) 
     { 
      _handlerList.HandleMessage(new PhotonRequest(operationRequest.OperationCode, operationRequest.Parameters.ContainsKey(Server.SubCodeParameterKey) ? (int?)Convert.ToInt32(operationRequest.Parameters[Server.SubCodeParameterKey]) : null, operationRequest.Parameters), this); 
     } 

     protected override void OnEvent(IEventData eventData, SendParameters sendParameters) 
     { 
      _handlerList.HandleMessage(new PhotonEvent(eventData.Code, eventData.Parameters.ContainsKey(Server.SubCodeParameterKey) ? (int?)Convert.ToInt32(eventData.Parameters[Server.SubCodeParameterKey]) : null, eventData.Parameters), this); 
     } 

     protected override void OnOperationResponse(OperationResponse operationResponse, SendParameters sendParameters) 
     { 
      _handlerList.HandleMessage(new PhotonResponse(operationResponse.OperationCode, operationResponse.Parameters.ContainsKey(Server.SubCodeParameterKey) ? (int?)Convert.ToInt32(operationResponse.Parameters[Server.SubCodeParameterKey]) : null, operationResponse.Parameters, operationResponse.DebugMessage, operationResponse.ReturnCode), this); 
     } 

     protected override void OnDisconnect(DisconnectReason reasonCode, string reasonDetail) 
     { 
      Server.ConnectionCollection.OnDisconnect(this); 
     } 

    } 
} 

ответ

0

ошибка дает вам все, что вам нужно знать.

PhotonServerHandler является абстрактным классом, который реализует интерфейс IHandler

Это означает, что все методы, объявленные в IHandler, должны быть реализованы в PhotonServerHandler.

Вот твердый пример того, почему вы получите эту ошибку

public interface A 
{ 
    void DoThingOne(); 
    void DoThingTwo(); 
} 

public abstract class B : A 
{ 
    DoThingOne() 
} 

выше будет выдавать ошибку.

Если вы используете визуальную студию, попробуйте щелкнуть правой кнопкой мыши по интерфейсу, а затем реализовать интерфейс.

, который должен реализовать все необходимые методы из интерфейса.

+0

Я написал HandleMessge вместо HandleMessAge, я получил одно письмо, потеряв меня 2 часа. Большое спасибо. –

+0

Суровый! Не беспокойся. Рад, что вы его отсортировали :) – PolymorphicPhantom

Смежные вопросы