So, I know this is not exactly the best place for a beamserver question, but I know a lot of people here use beamserver so I thought I would give it a shot. I’m trying to use the case switch method that is used in the chat demo to determine between two types of messages. But, however hard I try, I can’t get it to recognize the second type of message. Here is my code:
Server:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using BeamBase;
using BeamServer;
using System.IO;
namespace BeamServer_Test
{
class Program
{
// Message codes
const byte CS_CHAT = 100; // Client to server chat message
// Parameters:
// message: UTF String
const byte SC_CHAT = 100; // Server to client chat message
// Parameters:
// nick: UTF String
// message: UTF String
const byte CS_TRANSFORM_UPDATE = 120; // Client to server transform message
// Parameters:
// xTransform: float
// yTransform: float
// zTransform: float
const byte SC_TRANSFORM_UPDATE = 120; // Server to client transform message
// Parameters:
// xTransform: float
// yTransform: float
// zTransform: float
// User list
static Hashtable users;
// Deserializer
static Deserializer deserializer;
static void Main(string[] args)
{
users = new Hashtable();
deserializer = new Deserializer();
ServerConfig serverConfig = new ServerConfig();
serverConfig.port = 10001;
serverConfig.appVersion = "0.2";
Server server = new Server(serverConfig);
server.UserConnected += new Server.UserConnectedHandler(server_UserConnected);
server.Start();
Console.WriteLine("CHAT Server started");
while (Console.ReadKey().Key != ConsoleKey.Escape)
{
// Program main loop
}
}
static void server_UserConnected(User user)
{
Console.WriteLine("User connected from " + user.remoteEndPoint);
user.Logged += new User.LoggedHandler(user_Logged);
user.Disconnected += new User.DisconnectedHandler(user_Disconnected);
user.MessageReceived += new User.MessageReceivedHandler(user_MessageReceived);
user.ConnectionError += new User.ConnectionErrorHandler(user_ConnectionError);
users.Add(user.remoteEndPoint, user);
}
static void user_Logged(User user)
{
Console.WriteLine("User " + user.nick + " logged from " + user.remoteEndPoint);
}
static void user_ConnectionError(User user, string error)
{
Console.WriteLine("Connection error from " + user.remoteEndPoint);
}
static bool user_MessageReceived(User user, byte type, ushort size, byte[] payload)
{
deserializer.Set(payload, size);
return true;
}
static void BroadcastMessage(byte type, ushort length, byte[] payload)
{
foreach (string endPoint in users.Keys)
{
User user = users[endPoint] as User;
user.SendMessage(type, length, payload);
}
}
static void SendChatMessage(string message, string name)
{
Serializer serializer = new Serializer(new MemoryStream());
serializer.WriteUTF(name);
serializer.WriteUTF(message);
BroadcastMessage(SC_CHAT, serializer.currentPosition, serializer.GetBytes());
}
static void SendTransform(string name, float xTransform, float yTransform, float zTransform)
{
Serializer serializer = new Serializer(new MemoryStream());
serializer.WriteUTF(name);
serializer.WriteFloat(xTransform);
serializer.WriteFloat(yTransform);
serializer.WriteFloat(zTransform);
BroadcastMessage(SC_TRANSFORM_UPDATE, serializer.currentPosition, serializer.GetBytes());
}
static void user_Disconnected(User user)
{
Console.WriteLine("User " + user.nick + " disconnected");
users.Remove(user.remoteEndPoint);
}
}
}
Client:
using UnityEngine;
using System.Collections;
using BeamBase;
using BeamClient;
using System.IO;
public class BeamServerTestChat: MonoBehaviour {
// Message codes
const byte CS_CHAT = 100; // Client to server chat message
// Parameters:
// message: UTF String
const byte SC_CHAT = 100; // Server to client chat message
// Parameters:
// nick: UTF String
// message: UTF String
const byte CS_TRANSFORM_UPDATE = 120; // Client to server chat message
// Parameters:
// xTransform: float// Server to client transform message
// Parameters:
// xTransform: float
// yTransform: float
// zTransform: float
const byte SC_TRANSFORM_UPDATE = 120; // Server to client transform message
// Parameters:
// xTransform: float
// yTransform: float
// zTransform: float
public Vector3 p;
public Transform target;
Client client;
Deserializer deserializer;
public GUIText inputText;
public GUIText outputText;
string inputStr;
int numLines;
const string cursorGraph = "|/-\\-";
int cursorGraphIndex = 0;
// Use this for initialization
void Start () {
deserializer = new Deserializer();
ClientConfig clientConfig = new ClientConfig();
clientConfig.appVersion = "0.2";
client = new Client(clientConfig);
client.Connected += OnConnected;
client.LoginSuccessful += OnLogged;
client.MessageReceived += OnMessageReceived;
inputText.text = "";
outputText.text = "";
WriteOutputText("Connecting...");
client.Connect("127.0.0.1", 10001);
}
void OnConnected()
{
inputStr = "";
inputText.text = "";
outputText.text = "";
numLines=0;
WriteOutputText("Welcome to Unity3D / BeamServer Chat");
WriteOutputText("Type your nick and press [ENTER] to login");
}
void OnLogged()
{
WriteOutputText("Logged!");
}
void SendChatMessage(string message)
{
Serializer serializer = new Serializer(new MemoryStream());
serializer.WriteUTF(message);
client.SendMessage(CS_CHAT, serializer.currentPosition, serializer.GetBytes());
}
bool OnMessageReceived(byte type, ushort length, byte[] payload)
{
deserializer.Set(payload, length);
string nick = deserializer.ReadUTF();
string message = deserializer.ReadUTF();
WriteOutputText(nick+": "+message);
return true;
}
void WriteOutputText(string message)
{
outputText.text+=message+"\n";
numLines++;
if (numLines==21)
{
int idx = outputText.text.IndexOf('\n')+1;
outputText.text = outputText.text.Substring(idx, outputText.text.Length-idx);
numLines--;
}
}
void SendTransform(float xTransform, float yTransform, float zTransform)
{
Serializer serializer = new Serializer(new MemoryStream());
serializer.WriteFloat(xTransform);
serializer.WriteFloat(yTransform);
serializer.WriteFloat(zTransform);
client.SendMessage(CS_TRANSFORM_UPDATE, serializer.currentPosition, serializer.GetBytes());
}
// Update is called once per frame
void Update () {
foreach (char c in Input.inputString) {
// Backspace - Remove the last character
if (c == '\b') {
if (inputStr.Length != 0)
inputStr = inputStr.Substring(0, inputStr.Length - 1);
}
// End of entry
else if (c == '\n' || c == '\r') {
if (client.logged==false)
{
client.Login(inputStr, "");
}
else
{
SendChatMessage(inputStr);
}
inputStr="";
}
// Normal text input - just append to the end
else {
inputStr += c;
}
}
inputText.text = inputStr+cursorGraph[cursorGraphIndex];
cursorGraphIndex++;
if (cursorGraphIndex==cursorGraph.Length)
cursorGraphIndex = 0;
p = target.transform.position;
SendTransform(p[0], p[1], p[2]);
}
void OnDisable() {
client.CloseConnection();
}
}
Any help would be appreciated. Thanks!