private void OnReceive(object o, SocketAsyncEventArgs args) { if (args.BytesTransferred == 0) { return; } try { if (args.SocketError != SocketError.Success) { Debug.Log("[Client][" + DateTime.Now + "] SocketError " + args.SocketError); return; } EndPoint endPoint = args.RemoteEndPoint; NetworkSettings.ServiceType serviceType = (NetworkSettings.ServiceType)args.Buffer[0]; byte[] buffer = new byte[args.BytesTransferred - 1]; Array.Copy(args.Buffer, 1, buffer, 0, args.BytesTransferred - 1); lastContactWithServer = DateTime.Now; switch (serviceType) { case NetworkSettings.ServiceType.PING: OnPing(); break; case NetworkSettings.ServiceType.PONG: break; case NetworkSettings.ServiceType.CONNECT: OnConnect(buffer); break; case NetworkSettings.ServiceType.LOBBY: OnLobby(); break; case NetworkSettings.ServiceType.GAMEUPDATE: OnGameUpdate(buffer); break; default: Debug.Log("[Server][" + DateTime.Now + "] BadServiceType " + serviceType + "=" + args.Buffer[0]); break; } } catch (Exception e) { Debug.Log("[Client][" + DateTime.Now + "] Exception " + e); } }
public void SEND(NetworkSettings.ServiceType serviceType, byte[] buffer = null) { if (buffer == null) { socket.SendTo(new byte[] { (byte)serviceType }, socket.RemoteEndPoint); return; } byte[] outBuffer = new byte[1 + buffer.Length]; outBuffer[0] = (byte)serviceType; buffer.CopyTo(outBuffer, 1); socket.SendTo(outBuffer, socket.RemoteEndPoint); }