/// <summary> /// NET_SendUnreliableMessage /// returns 0 if the message connot be delivered reliably, but the connection /// is still considered valid /// returns 1 if the message was sent properly /// returns -1 if the connection died /// </summary> public static int SendUnreliableMessage(qsocket_t sock, MsgWriter data) { if (sock == null) { return(-1); } if (sock.disconnected) { Con.Print("NET_SendMessage: disconnected socket\n"); return(-1); } SetNetTime(); int r = _Drivers[sock.driver].SendUnreliableMessage(sock, data); if (r == 1 && sock.driver != 0) { _UnreliableMessagesSent++; } if (_IsRecording) { _VcrSendMessage.time = Host.Time; _VcrSendMessage.op = VcrOp.VCR_OP_SENDMESSAGE; _VcrSendMessage.session = 1;// (long)sock; Uze todo: ??????? _VcrSendMessage.ret = r; byte[] buf = Sys.StructureToBytes(ref _VcrSendMessage); Host.VcrWriter.Write(buf); } return(r); }
/// <summary> /// NET_CanSendMessage /// Returns true or false if the given qsocket can currently accept a /// message to be transmitted. /// </summary> public static bool CanSendMessage(qsocket_t sock) { if (sock == null) { return(false); } if (sock.disconnected) { return(false); } SetNetTime(); bool r = _Drivers[sock.driver].CanSendMessage(sock); if (_IsRecording) { _VcrSendMessage.time = Host.Time; _VcrSendMessage.op = VcrOp.VCR_OP_CANSENDMESSAGE; _VcrSendMessage.session = 1; // (long)sock; Uze: todo: do something? _VcrSendMessage.ret = r ? 1 : 0; byte[] buf = Sys.StructureToBytes(ref _VcrSendMessage); Host.VcrWriter.Write(buf, 0, buf.Length); } return(r); }
/// <summary> /// NET_CheckNewConnections /// </summary> /// <returns></returns> public static qsocket_t CheckNewConnections() { SetNetTime(); for (_DriverLevel = 0; _DriverLevel < _Drivers.Length; _DriverLevel++) { if (!_Drivers[_DriverLevel].IsInitialized) { continue; } if (_DriverLevel > 0 && !_IsListening) { continue; } qsocket_t ret = Net.Driver.CheckNewConnections(); if (ret != null) { if (_IsRecording) { _VcrConnect.time = Host.Time; _VcrConnect.op = VcrOp.VCR_OP_CONNECT; _VcrConnect.session = 1; // (long)ret; // Uze: todo: make it work on 64bit systems byte[] buf = Sys.StructureToBytes(ref _VcrConnect); Host.VcrWriter.Write(buf, 0, buf.Length); buf = Encoding.ASCII.GetBytes(ret.address); int count = Math.Min(buf.Length, NET_NAMELEN); int extra = NET_NAMELEN - count; Host.VcrWriter.Write(buf, 0, count); for (int i = 0; i < extra; i++) { Host.VcrWriter.Write((byte)0); } } return(ret); } } if (_IsRecording) { _VcrConnect.time = Host.Time; _VcrConnect.op = VcrOp.VCR_OP_CONNECT; _VcrConnect.session = 0; byte[] buf = Sys.StructureToBytes(ref _VcrConnect); Host.VcrWriter.Write(buf, 0, buf.Length); } return(null); }
/// <summary> /// NET_GetMessage /// returns data in net_message sizebuf /// returns 0 if no data is waiting /// returns 1 if a message was received /// returns 2 if an unreliable message was received /// returns -1 if the connection died /// </summary> public static int GetMessage(qsocket_t sock) { //int ret; if (sock == null) { return(-1); } if (sock.disconnected) { Con.Print("NET_GetMessage: disconnected socket\n"); return(-1); } SetNetTime(); int ret = _Drivers[sock.driver].GetMessage(sock); // see if this connection has timed out if (ret == 0 && sock.driver != 0) { if (_Time - sock.lastMessageTime > _MessageTimeout.Value) { Close(sock); return(-1); } } if (ret > 0) { if (sock.driver != 0) { sock.lastMessageTime = _Time; if (ret == 1) { _MessagesReceived++; } else if (ret == 2) { _UnreliableMessagesReceived++; } } if (_IsRecording) { _VcrGetMessage.time = Host.Time; _VcrGetMessage.op = VcrOp.VCR_OP_GETMESSAGE; _VcrGetMessage.session = 1;// (long)sock; Uze todo: write somethisng meaningful _VcrGetMessage.ret = ret; byte[] buf = Sys.StructureToBytes(ref _VcrGetMessage); Host.VcrWriter.Write(buf, 0, buf.Length); Host.VcrWriter.Write(Net.Message.Length); Host.VcrWriter.Write(Net.Message.Data, 0, Net.Message.Length); } } else { if (_IsRecording) { _VcrGetMessage.time = Host.Time; _VcrGetMessage.op = VcrOp.VCR_OP_GETMESSAGE; _VcrGetMessage.session = 1; // (long)sock; Uze todo: fix this _VcrGetMessage.ret = ret; byte[] buf = Sys.StructureToBytes(ref _VcrGetMessage); Host.VcrWriter.Write(buf, 0, buf.Length); } } return(ret); }